"""
读取并拼接yaml文件内容
"""

import os

import yaml


class YamlUtil:
    def __init__(self):
        # 拼接地址后记得加/
        self.data_path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "data/")

        print(self.data_path)

    def read_extra_yaml(self):
        # 固定读取extra文件
        with open(self.data_path + "extract.yaml", mode='r', encoding='utf8')as f:
            value = yaml.safe_load(f)
            return value  # 反之返回value值

    def read_testcases_yaml(self, yaml_name, key_name=None):
        # 固定打开文件方式
        with open(self.data_path + yaml_name, mode='r', encoding='utf8')as f:
            value = yaml.safe_load(f)
            if key_name:  # 判断如果key_name有值 返回key_name下的value值
                return value[key_name]
            return value  # 反之返回value值

    def extract_case(self, yaml_name, key_name):
        # 拿到获取到的数组request_info,只有1条request_info，所以获取数组[0]
        # 这样可以改造数据结构，可以只拿一次request_info，多次case_info且都是字典格式
        case_value = self.read_testcases_yaml(yaml_name, key_name)[0]
        new_case = []  # 定义new_case为一个数组
        for value in case_value['case_info']:
            # 拼接一个新的数据，case_info为字典格式
            new_case.append({"request_info": case_value['request_info'], "case_info": value})
        return new_case

    def write_extra_yaml(self, data):
        # a是追加，w每次都清空
        """
        写入yaml文件
        :param data:
        :return:
        """
        with open(self.data_path + "extract.yaml", mode='a', encoding='utf8')as f:
            # 读取到文件内的老数据
            old_value = self.read_extra_yaml()
            # 如果old_value，就执行下面操作，如果没内容直接清空数据写入data
            if old_value:
                for key, value in data.items():
                    # 如果key值和以前一样进行替换，如果不是就进行新增
                    # 如果key值相同，每次都更新新的value值
                    old_value[key] = value
                # 清空数据
                self.clear_extract_yaml()
                # allow_unicode编码，sort_keys默认根据写入的时间排序
                yaml.dump(data=old_value, stream=f, allow_unicode=True, sort_keys=False)
            else:
                yaml.dump(data=data, stream=f, allow_unicode=True, sort_keys=False)

    def clear_extract_yaml(self):
        """
        清理extract.yaml文件
        :return:
        """
        with open(self.data_path + "extract.yaml", mode='w', encoding='utf8')as f:
            f.truncate()


if __name__ == '__main__':
    data = YamlUtil().extract_case("order_center.yaml", "order_detail")
    print(data)
    data = {"code1": 201, "data": {"id": 3385, "age": "18"}}
    YamlUtil().write_extra_yaml(data)
    # YamlUtil().read_extra_yaml()
